//
//  UserAccoutViewModel.swift
//  XinLangWeibo10
//
//  Created by 白利兵 on 15/10/18.
//  Copyright © 2015年 itheima. All rights reserved.
//

import Foundation
// 用户账户视图模型，用于封装业务逻辑
class UserAccountViewModel {
    // 定义用户视图模型
    var account: UserAccount?
    
    // 创建单例对象
    static let shareUserAccount = UserAccountViewModel()
    
    // 获取用户数据路径
    private var accountPath: String? {
        var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        path = (path as NSString).stringByAppendingPathComponent("account.plist")
        //print(path)
        return path
        }
    
    // 判断用户是否登录
     var logon: Bool {
        // 用户token值存在且没有过期
        return (account?.access_token != nil && !isExpired)
    }
    
    // 判断账户是否过期
    private var isExpired: Bool {
        if account?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            return false
        }
        return true
    }
    // 定义一个头像URL
    var avatarUrl: NSURL {
        return NSURL(string: (account?.avatar_large) ?? "")!
    }
    // 定义一个token字典
    var tokenDict: [String: AnyObject]? {
         return isExpired ? nil : ["access_token": account!.access_token!]
    }
    // 构造函数
    init () {
        // 解档用户信息
        account = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath!) as? UserAccount
        
        // 判断是否过期
        if isExpired {
            print("账户已过期或者未创建")
            // 清空账户信息
            account = nil
        }
    }
    
}
extension UserAccountViewModel {
    func loadAccessToke(code: String, finished: (isSuccessed: Bool) -> ()) {
        //  加载 accessToken
        NetworkTools.sharedTools.loadAccessToken(code) { (result, error) -> () in
            
            // 1> 判断错误
            if error != nil {
                print("token获取出错了")
                
                // 回调是否成功
                finished(isSuccessed: false)
                return
            }
            
            // 2> 输出结果
            self.account = UserAccount(dict: result as! [String: AnyObject])
            
            // 3> 加载用户信息
            self.loadUserInfo(self.account!, finished: finished)
    }
        
}
    // 加载用户信息
    private func loadUserInfo(account: UserAccount, finished: (isSuccessed: Bool) -> ()) {
        NetworkTools.sharedTools.loadUserInfo(self.account!.uid!) { (result, error) -> () in
            if error != nil {
                print("加载用户信息网络出错")
                // 回调网络加载状态
                finished(isSuccessed: false)
                return
            }
                
            else {
                print(result)
            }
            
            // 保存用户信息
            guard let dict = result as? [String: AnyObject] else {
                print("格式不对")
                // 回调网络状态
                finished(isSuccessed: false)
                return
            }
            account.screen_name = dict["screen_name"] as? String
            account.avatar_large = dict["avatar_large"] as? String
            //print(account.screen_name, account.avatar_large)
            //print(account)
            NSKeyedArchiver.archiveRootObject(account, toFile: self.accountPath!)
            
            // 回调网络成功状态(一定不能忘记，否则，定义处的函数无法执行)
            finished(isSuccessed: true)
        }
    }
    
}





